/*************************************************************************
** Copyright (C) 2014  Mario Marquez <maqzma@gmail.com>.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program.  If not, see <http://www.gnu.org/licenses/>.
*************************************************************************/

#ifndef DICTIONARY_H
#define DICTIONARY_H

#include <string>
#include <vector>

/**
 * Carga una lista de palabras desde un archivo.
 *
 * Cada palabra tiene que ser dividida por un
 * salto de linea. Una palabra por linea.
 *
 * La primer linea es el nombre del diccionario.
 */
class Dictionary
{
public:
    typedef std::vector<std::string> WordList;

    Dictionary() = default;

    /**
     * Ejecuta a load.
     */
    Dictionary(const std::string &filename);

    /**
     * Carga el archivo y almacena tanto el
     * nombre como las palabras del diccionario.
     *
     * Evita acomulaciones limpiando la lista de
     * palabras cada vez que se llama a este metodo.
     *
     * Si ocurre algun fallo al cargar el archivo
     * lanza una excepcion del tipo ios_base::failure.
     */
    void load(const std::string &filename);

    const std::string &name() const;
    const WordList &words() const;

private:
    std::string _name = "";
    WordList _words;
};

#endif // DICTIONARY_H
